// pages/noShake/noShake.js
Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		searchKey: '',
		timer: '',
		previous: 0,
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad: function(options) {

	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady: function() {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow: function() {

	},

	//函数防抖
	//应用场景:1搜索框搜索输入。只需用户最后一次输入完，再发送请求 2手机号、邮箱验证输入检测
	debounce(fn, delay) {
		var timer;
		return () => {
			var _this = this;
			var args = arguments;
			if (timer) {
				clearTimeout(timer);
			}
			timer = setTimeout(() => {
				fn.apply(_this, args);
			}, delay);
		}
	},

	debounceSim(fn, delay) {
		var self = this;
		var timer = self.data.timer;
		console.log(timer);
		console.log('---');
		clearTimeout(timer);
		timer = setTimeout(() => {
			fn;
		}, delay);
		self.setData({
			timer: timer,
		})
		console.log(timer);
	},

	//测试-input函数防抖
	inputChange(e) {
		var self = this,
			text = e.detail.value;
		self.data.keyWord = text;

		console.log(text);
		// 在事件被触发1秒后再执行回调，如果在这1秒内又被触发，则重新计时。
		// self.debounce(self.fn(), 1000);//测试效果_fn函数立马执行
		// self.debounceSim(self.fn(), 2000);//测试效果_fn函数立马执行
		// 用data存储timer
		var timer = self.data.timer;
		clearTimeout(timer);
		timer = setTimeout(() => {
			self.fn();
		}, 1000);
		self.setData({
			timer: timer,
		})
	},

	//函数防抖_执行函数
	fn() {
		var self = this
		console.warn('fn 执行了');
		self.setData({
			keyWord: self.data.keyWord
		});
	},

	//函数节流_setTimeout
	//滚动加载，加载更多或滚到底部监听:1滚动加载，加载更多或滚到底部监听 2高频点击提交，表单重复提交
	commit() {
		var self = this
		var timer = self.data.timer;
		if (timer != '') {
			console.warn(timer);
			return;
		}
		timer = setTimeout(() => {
			// self.fn(); //放在此处不会立刻执行
			self.setData({
				timer: '',
			})
		}, 2000);
		self.setData({
			timer: timer,
		})
		self.fn();
	},

	//思路：保存当前时间，或者是道歉点击的毫秒数，第二次点击比较时间差，从而实现2s内不重复调用
	//函数节流_时间戳实现
	commitTamp() {
		var self = this
		var previous = self.data.previous;
		var now = new Date();
		if (now - previous > 2000) {
			previous = now;
			self.setData({
				previous: previous,
			})
			self.fn();
		}
	},

	//函数节流-方式2
	commitTamp2(e) {
		//e.timeStamp：当前点击时的毫秒数；
		if (e.timeStamp - this.data.previous > 2000) {
			console.log('commitTamp2');
		}
		//储存上一次点击时的毫秒数，默认0
		this.data.previous = e.timeStamp;
	},
})
